package com.banesco.precargadepositos.datos;

import android.content.ContentValues;
import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;

import com.banesco.precargadepositos.comun.recursos.Recursos;

/**
 * Clase que maneja las creacion y las versiones de bases de datos 
 * @author Juan Carlos Coello
 * Trascend NC - 09/2013 
 */
public class SQLiteManager extends SQLiteOpenHelper {

	private final static String DATABASE_NAME = "precargadepositos.db";
	public final static String TABLE_PRECARGA = "pcd_Precarga";
	public final static String TABLE_SETTING = "pcd_Configuracion";
	private final static int DATABASE_VERSION = 7;

	public final static String COL_PRECARGA_ID ="idPrecarga";
	public final static String COL_PRECARGA_FECHA = "fecha";
	public final static String COL_PRECARGA_TICKET = "ticket";
	public final static String COL_PRECARGA_TIPO_DOCUMENTO_BEN = "tipoDocumentoBen";
	public final static String COL_PRECARGA_NUMERO_DOCUMENTO_BEN = "numeroDocumentoBen";
	public final static String COL_PRECARGA_CODIGO_ESTADO = "codigoEstado";
	public final static String COL_PRECARGA_ESTADO = "estado";
	public final static String COL_PRECARGA_TIPO_TARJETA = "tipoTarjeta";
	public final static String COL_PRECARGA_NUMERO_TARJETA_CUENTA = "numeroTarjeta";
	public final static String COL_PRECARGA_TIPO_DOCUMENTO_DEP = "tipoDocumentoDep";
	public final static String COL_PRECARGA_NUMERO_DOCUMENTO_DEP = "numeroDocumentoDep";
	public final static String COL_PRECARGA_TIPO_PRECARGA = "tipoPrecarga";
	public final static String COL_PRECARGA_NUMERO_CHEQUES = "numeroCheques";
	public final static String COL_PRECARGA_MONTO = "monto";
	public final static String COL_PRECARGA_TIPO_TRANSACCION = "tipoTransaccion";

	public final static String COL_SETTING_ID = "idSetting";
	public final static String COL_SETTING_NAME = "name";
	public final static String COL_SETTING_VALUE = "value";

	/**
	 * Invoca al manejador de SQLite
	 * @param context
	 */
	public SQLiteManager(Context context) {
		super(context, DATABASE_NAME, null, DATABASE_VERSION);
	}

	/**
	 * Crea las tablas pertinentes con el manejador
	 */
	@Override
	public void onCreate(SQLiteDatabase db) {		  
		db.execSQL(crearTablaPrecarga());		  
		db.execSQL(crearTablaSetting());

		//Se insertan los valores prederterminados en la tabla de configuracion
		ContentValues values = cargarValoresDB();	  
		db.insert(SQLiteManager.TABLE_SETTING
				, null
				, values);
	}

	/**
	 * Actualiza las tablas con el manejador
	 */
	@Override
	public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {	
		db.execSQL("DROP TABLE IF EXISTS " + TABLE_PRECARGA);
		db.execSQL("DROP TABLE IF EXISTS " + TABLE_SETTING);
		onCreate(db);  
	}		  

	/**
	 * Genera el query para la creacion de la tabla de precargas
	 * @return query de creacion de la tabla de precargas
	 */
	private String crearTablaPrecarga() {
		StringBuilder query = new StringBuilder();
		query.append("CREATE TABLE IF NOT EXISTS ").append(TABLE_PRECARGA)
		.append(" (")
		.append(COL_PRECARGA_ID).append(" INTEGER PRIMARY KEY AUTOINCREMENT, ")
		.append(COL_PRECARGA_FECHA).append(" TEXT, ")
		.append(COL_PRECARGA_TICKET).append(" INTEGER, ")
		.append(COL_PRECARGA_TIPO_DOCUMENTO_BEN).append(" TEXT, ")
		.append(COL_PRECARGA_NUMERO_DOCUMENTO_BEN).append(" TEXT, ")
		.append(COL_PRECARGA_CODIGO_ESTADO).append(" TEXT, ")
		.append(COL_PRECARGA_ESTADO).append(" TEXT, ")
		.append(COL_PRECARGA_TIPO_TARJETA).append(" TEXT, ")
		.append(COL_PRECARGA_NUMERO_TARJETA_CUENTA).append(" TEXT, ")
		.append(COL_PRECARGA_TIPO_DOCUMENTO_DEP).append(" TEXT, ")
		.append(COL_PRECARGA_NUMERO_DOCUMENTO_DEP).append(" TEXT, ")
		.append(COL_PRECARGA_TIPO_PRECARGA).append(" TEXT, ")
		.append(COL_PRECARGA_NUMERO_CHEQUES).append(" TEXT, ")
		.append(COL_PRECARGA_MONTO).append(" TEXT, ")
		.append(COL_PRECARGA_TIPO_TRANSACCION).append(" INTEGER")
		.append(");");

		return query.toString();
	}

	/**
	 * Genera el query para la creacion de la tabla de configuracion
	 * @return query de creacion de la tabla de configuracion
	 */
	private String crearTablaSetting() {		
		StringBuilder query = new StringBuilder();
		query.append("CREATE TABLE IF NOT EXISTS ").append(TABLE_SETTING)
		.append(" (")
		.append(COL_SETTING_ID).append(" INTEGER PRIMARY KEY AUTOINCREMENT, ")
		.append(COL_SETTING_NAME).append(" TEXT, ")
		.append(COL_SETTING_VALUE).append(" TEXT")
		.append(");");

		return query.toString();
	}

	/**
	 * Metodo que carga los valores que se van a insertar en la tabla de configuracion
	 * @return valores pre cargados
	 */
	private ContentValues cargarValoresDB() {
		ContentValues values = new ContentValues();

		values.put(SQLiteManager.COL_SETTING_NAME, Recursos.KEY_CONTRATO_ACEPTADO);
		values.put(SQLiteManager.COL_SETTING_VALUE, Recursos.CONTRATO_RECHAZADO);  

		return values;
	}

}